/*
 * c_ini.h
 *
 * INI配置文件解析器的头文件
 *
 * Created on: 2025/08/26
 *      Author: C Developer
 */

#ifndef C_INI_H
#define C_INI_H

#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif

/* 错误码定义 */
#define INI_OK              0   /* 操作成功 */
#define INI_ERROR           -1   /* 一般错误 */
#define INI_FILE_NOT_FOUND  -2   /* 文件未找到 */
#define INI_MEMORY_ERROR    -3   /* 内存分配错误 */
#define INI_INVALID_FORMAT  -4   /* 无效的INI格式 */

/* 前向声明解析器结构体 */
typedef struct ini_parser_t ini_parser_t;

/* 创建新的INI解析器实例 */
ini_parser_t *ini_create_parser(void);

/* 从文件加载INI配置 */
int ini_load_file(ini_parser_t *parser, const char *filename);

/* 从内存加载INI配置 */
int ini_load_memory(ini_parser_t *parser, const char *content, size_t size);

/* 保存INI配置到文件 */
int ini_save_file(ini_parser_t *parser, const char *filename);

/* 获取字符串类型的配置项 */
const char *ini_get_string(ini_parser_t *parser, const char *section, const char *key, const char *default_value);

/* 获取整数类型的配置项 */
int ini_get_int(ini_parser_t *parser, const char *section, const char *key, int default_value);

/* 获取浮点数类型的配置项 */
double ini_get_double(ini_parser_t *parser, const char *section, const char *key, double default_value);

/* 获取布尔类型的配置项 */
int ini_get_boolean(ini_parser_t *parser, const char *section, const char *key, int default_value);

/* 设置字符串类型的配置项 */
int ini_set_string(ini_parser_t *parser, const char *section, const char *key, const char *value);

/* 设置整数类型的配置项 */
int ini_set_int(ini_parser_t *parser, const char *section, const char *key, int value);

/* 设置浮点数类型的配置项 */
int ini_set_double(ini_parser_t *parser, const char *section, const char *key, double value);

/* 设置布尔类型的配置项 */
int ini_set_boolean(ini_parser_t *parser, const char *section, const char *key, int value);

/* 删除指定的配置项 */
int ini_delete_key(ini_parser_t *parser, const char *section, const char *key);

/* 删除指定的节 */
int ini_delete_section(ini_parser_t *parser, const char *section);

/* 检查指定的节是否存在 */
int ini_has_section(ini_parser_t *parser, const char *section);

/* 检查指定的配置项是否存在 */
int ini_has_key(ini_parser_t *parser, const char *section, const char *key);

/* 获取所有节名 */
int ini_get_all_sections(ini_parser_t *parser, char **sections, int max_count);

/* 获取指定节下的所有键名 */
int ini_get_all_keys(ini_parser_t *parser, const char *section, char **keys, int max_count);

/* 释放INI解析器实例 */
void ini_destroy_parser(ini_parser_t *parser);

#ifdef __cplusplus
}
#endif

#endif /* C_INI_H */